//
//  JSSStatusViewModel.swift
//  WeiBoItem
//
//  Created by jss on 16/4/20.
//  Copyright © 2016年 jss. All rights reserved.
//

import UIKit
import SDWebImage

class JSSStatusListViewModel: NSObject {
    //先前这个数组里面存的都是JSSStatusModel里面的数据
    //    var statusArray:[JSSStatusModel]?
    
    //现在加了一层ViewModel(ViewModel里面有个StatusModel里面的属性 通过这个属性取到StatusModel里的值)所以现在数组里保存的是JSSStatusViewModel类型的数据实际上保存的还是JSSStatusModel类型的数据
   
    var statusArray:[JSSStatusViewModel]?
    
  
    
    func loadDate(isPullup: Bool,finished:(isSuccess: Bool,count:Int)->()) {
//         func loadDate(finished:(isSuccess: Bool)->()) {
    
        //1.定义请求地址
        let urlStr = "https://api.weibo.com/2/statuses/friends_timeline.json"
        
        //2.定义请求参数
        //        if let acount = JSSUserAccountModel.sharedAccontModel.account?.access_token{
        //
        //            "access_token" = ac
        //        }
        
        //上拉刷新(加载更多(更老的微博))
        var max_id: Int64 = 0
        //下拉刷新(刷新最新的微博)
        var since_id: Int64 = 0

        if isPullup {
           //代表是上拉加载
        //需要取到当前数组里面最后一个元素的id
            max_id = statusArray?.last?.statusModel?.id ?? 0
            
            //去除重复  //若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
            if max_id != 0 {
                
                max_id--
            }
        
        }else {
            //下拉刷新
            since_id = statusArray?.first?.statusModel?.id ?? 0
        }
        
        print("\(max_id)")
        print("\(since_id)")
        
        let parametaes = [
            
            "access_token":JSSUserAccountModel.sharedAccontModel.account?.access_token ?? "",
            "max_id":"\(max_id)",
            "since_id":"\(since_id)"
            
        ]
        
        //3.发起请求
        HMNetworkTools.sharedTools.request(HMRequestMethod.Get, urlString: urlStr, parameters: parametaes) { (responseObject, error) -> () in
            
            
            if error != nil {
                print(error)
                return
            }
            print(responseObject)
            
            guard let responseDict = responseObject as? [String:AnyObject] else {
                
                print("返回的数据不是字典")
                
                finished(isSuccess:false,count: 0)
                return
            }
            
            //取出statuses 对应的数据 (字典数组)
            guard let dicts = responseDict["statuses"] as? [[String:AnyObject]] else {
                
                finished(isSuccess:false,count: 0)
                return
            }
            
            //定义一个数组  保存模型
            var arryList = [JSSStatusViewModel]()
            //遍历字典数组 进行字典转模型
            for values in dicts {
                //转成模型
                let status = JSSStatusModel(dict: values)
                
                //初始化一个VIewModel
                let ViewModel = JSSStatusViewModel()
                //设置模型到VIewModel里面去
                ViewModel.statusModel = status
                
                //把数据间接的保存到了VIewModel里面  以后取数据就到ViewModel去取就好了
                arryList.append(ViewModel)
                
                if status.retweeted_status != nil{
                    
                    print("传值成功")
                    //print(status)
                }else {
                    
                    // print("传值失败")
                }
            }
            //给属性赋值
            //self.statusArray = arryList
            // print(self.statusArray)
            
            if self.statusArray == nil {
                self.statusArray = [JSSStatusViewModel]()
            }

            //判断是否是上拉加载
            if isPullup {
                //拼装在后面
                self.statusArray = self.statusArray! + arryList
            }else{
                //拼接在cell的前面
                self.statusArray = arryList + self.statusArray!
            }

            print("加载回来\(arryList.count)条数据")
            
            //回调闭包
            //finished(isSuccess:true)
            //刷新数据
            // self.tableView.reloadData()
            
            //缓存单张图片
            
            self.cacheSiglePicture(arryList, finished: finished)
            
        }
        
    }
    
    
    //缓存单张图片
    //参数: 本次加载回来的数据  数据加载成功
    func cacheSiglePicture(arryList:[JSSStatusViewModel],finished:(isSuccess: Bool,count: Int)->()) {
        
        //创建队列组(调度组)
        let group = dispatch_group_create()
        
        //遍历数组 判断图片张数是否为1
        for value in arryList {
        
            //1.取原创微博的图片和转发微博的图片
            let oringinalPictures = value.statusModel?.pic_urls
            let retweetPictures = value.statusModel?.retweeted_status?.pic_urls
            //2.取到图片数组
            let pictureUrls = (oringinalPictures != nil && oringinalPictures!.count != 0) ? oringinalPictures : retweetPictures
            //3.判断取到的图片数量是否为1
            if pictureUrls?.count == 1 {
                
                //如果是1
                //1.先取到单张图片的下载地址
                let urlStr = pictureUrls?.first?.thumbnail_pic
                
               // print("图片地址\(urlStr)")
                
                //2.进组(放一个鸡蛋)
                dispatch_group_enter(group)
                //3.下载图片(SDWebImage缓存)
                SDWebImageManager.sharedManager().downloadImageWithURL(NSURL(string: urlStr ?? ""), options: [], progress: nil, completed: { (image, error, _, _, _) -> Void in
                    
                    //4.监听下载完成
                    
                    //更新单张图片的配图的大小
                    value.updateSiglePictureSize()
                    //拿出一个鸡蛋
                    dispatch_group_leave(group)
                })
     
            }
        }
        
        //所有单张图片下载完成通知
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            
            //回调闭包
            finished(isSuccess: true,count: arryList.count)
        }
    }
    
}
